const validate = require('validate.js');
const moment = require('moment');

// 全局 扩展 datetime 字段 的验证器
validate.extend(validate.validators.datetime, {
  /**
   * 该函数会自动用于日期格式转换
   * 它会在验证时自动触发，它需要将任何数据转换为时间戳返回
   * 如果无法转换，返回NaN
   * @param {*} value 传入要转换的值
   * @param {*} options 针对某个属性的验证配置
   */
  parse(value, options) {
    // 比如 用户传的是 2020:11:1 格式 自动转成时间戳 用去验证 因为验证都是用的时间戳
    let formats = ['YYYY-MM-DD HH:mm:ss', 'YYYY-M-D H:m:s', 'x'];
    if (options.dateOnly) {
      formats = ['YYYY-MM-DD', 'YYYY-M-D', 'x'];
    }
    return +moment.utc(value, formats, true);
  },
  /**
   * 用户显示错误消息时，使用的显示字符串
   */
  format(value, options) {
    // 将 时间戳 改成 日期格式 然后显示在 错误信息中
    let format = 'YYYY-MM-DD';
    if (!options.dateOnly) {
      format += ' HH:mm:ss';
    }
    return moment.utc(value).format(format);
  },
});
